package main

import (
	"archive/zip"
	"fmt"
	_ "os"
	"io/ioutil"
)

func testReadZip (path string) {
	reader, err := zip.OpenReader(path)
    if err != nil {
        panic(err)
	}
	
	defer reader.Close()

	// 注意，这里的 [] *File 是 zip 中所有的文件，包括文件夹内的文件，全部自动展开了
	// 所以你在读取碰到文件夹不需要再列出该文件夹的文件
	for _, file := range reader.File {
        fmt.Println(ReadFileContent(file))
	}

}

// 注意这里的 File 是 "archive/zip" 中的 File 
func ReadFileContent(file *zip.File) string {
	fmt.Printf("读取文件：%s\n", file.Name)

	//Open方法返回一个io.ReadCloser接口，提供读取文件内容的方法。可以同时读取多个文件。
	rc, err := file.Open()
	if err != nil {
		fmt.Println("file.Open 错误！")
		fmt.Println(err)
		return ""
	}
	defer rc.Close()

	if (file.FileInfo().IsDir()) { // 如果是文件夹类型
		fmt.Println("当前文件是文件夹！")
		return ""
	} else {
		data, readErr := ioutil.ReadAll(rc)
		if(readErr != nil) {
			fmt.Printf("读文件出错：%v \n", err)
			return ""
		} else {
			return string(data)
		}
	}
}


func main() {
	testReadZip("demo.zip")
}